package com.crm.dao;

import com.crm.model.Contact;

import java.util.List;

/**
 * @author <a href="mailto:huang0510@hotmail.com">HuangHuang</a>
 * @version $Id$
 */
public interface IContactDao {

    /**
     * 保存或更新联系人信息。
     *
     * @param contact 联系人实体对象。
     */
    void saveOrUpdate(Contact contact);

    /**
     * 获取所有联系人信息列表。
     *
     * @return 联系人信息列表
     */
    List getContactAll();

    /**
     * 获取所有联系人姓名列表。
     *
     * @return 返回所有联系人姓名列表。
     */
    List getContactNameAll();

    /**
     * 按用户编号获取联系人信息列表。
     *
     * @param userCode 用户编号
     * @return 返回某用户名下的所有联系人信息列表。
     */
    List getContactsByUsercode(String userCode);

    /**
     * 获取指定客户名下的所有联系人信息。
     *
     * @param customerId 客户ID
     * @return 返回某客户名下的所有联系人信息列表。
     */
    List getContactByCustomerId(String customerId);

    /**
     * 按用户编号获取指定客户名下的联系人信息。
     *
     * @param userCode     用户编号。
     * @param customerId   客户ID
     * @return 返回用户权限内的指定客户联系人信息列表。
     */
    List getContactByCustomerId(String userCode, String customerId);

    /**
     * 按联系人ID获取联系人信息。
     *
     * @param contactId 联系人ID。
     * @return 返回指定的联系人实体对象。
     */
    Contact getContactById(String contactId);

    /**
     * 按关键字检索客户联系人信息。
     *
     * @param uGroup       用户组
     * @param uCode        用户编码
     * @param customerName 客户名称
     * @param contactName  联系人名称
     * @param email        邮箱
     * @return 客户联系人信息列表
     */
    List getContactsByKeywords(String uGroup, String uCode, String customerName, String contactName, String email);

    /**
     * 删除联系人信息。
     *
     * @param contact 联系人信息。
     */
    void delete(Contact contact);

    /**
     * Get amount what contact with pointed customer.
     *
     * @param customerId
     * @return int - Amount of contact.
     */
    int count(String customerId);

    List getRecycleCont(String customerId);
}
